home *** CD-ROM | disk | FTP | other *** search
/ Scene Storm / Scene Storm - Volume 1.iso / coding / c / unix / src / fibstat.c < prev    next >
C/C++ Source or Header  |  1992-08-24  |  1KB  |  36 lines

  1. #include "amiga.h"
  2. #include "timeconvert.h"
  3. #include <fcntl.h>
  4. #include <time.h>
  5. #include <sys/stat.h>
  6.  
  7. void _fibstat(struct FileInfoBlock *fib, int isroot, struct stat *sbuf)
  8. {
  9.   long protection = fib->fib_Protection;
  10.   
  11.   sbuf->st_dev = sbuf->st_rdev = 0;
  12.   sbuf->st_uid = AMIGA_UID; sbuf->st_gid = AMIGA_GID;
  13.   sbuf->st_blksize = 512;
  14.   sbuf->st_nlink = 1;
  15.   sbuf->st_blocks = fib->fib_NumBlocks;
  16.   /* Give directories an arbitrary size */
  17.   if (fib->fib_Size == 0 && fib->fib_DirEntryType > 0) sbuf->st_size = 2048;
  18.   else sbuf->st_size = fib->fib_Size;
  19.   sbuf->st_ino = fib->fib_DiskKey;
  20.   sbuf->st_ctime = sbuf->st_atime = sbuf->st_mtime = _amiga2gmt(&fib->fib_Date);
  21.   
  22.   switch (fib->fib_DirEntryType)
  23.     {
  24.       /*case ST_SOFTLINK: sbuf->st_mode = S_IFLNK; break;*/
  25.     case ST_PIPEFILE: sbuf->st_mode = S_IFIFO; break;
  26.       /* If Examine wasn't braindead this would be the right test */
  27.     case ST_ROOT: sbuf->st_mode = S_IFDIR; protection = 0; break;
  28.     default: sbuf->st_mode = fib->fib_DirEntryType > 0 ? S_IFDIR : S_IFREG; break;
  29.     }
  30.   /* Examine is braindead. You can't tell if you've examined a root directory
  31.      (for which the protection flags are invalid) or not. */
  32.   if (isroot) protection = 0;
  33.  
  34.   sbuf->st_mode |= _make_mode(protection);
  35. }
  36.